One widely used multi-user, multi-tasking operating system (OS) is the UNIX® or UNIX-like OS (UNIX is a trademark of The UNIX System Laboratories, Inc.). UNIX-like OSes include UNIX variations such as BSD UNIX developed at UC Berkeley, and FreeBSD™ (a trademark of The FreeBSD Foundation); XENIX® (a registered trademark of Microsoft Corporation); LINUX® (a registered trademark of Linus Torvalds) and its variations, for example GNU™ (trademark of the GNU Project); and AIX® (a registered trademark of IBM), among others. Common among these operating systems is an inter-process communication mechanism including stream pipes and sockets for communicating between processes.
Each process, in order to perform a specific assigned function, is enabled to open and close files in order to support execution of the process. A description of these files is stored in a fixed size file-table which maintains descriptors for each file opened by the process. Consequently, the fixed size of the file-table limits the number of files that a process may have open simultaneously. A limited number of opened files defined by a UNIX system directly affects the scalability of the UNIX system. This is a very important feature in systems such as a server system that are intended to support multiple client connections.
A typical server system comprising the UNIX operating system will often use a communication multiplexer for management of multiple client connections. The communication multiplexer services and manages client connections using a combination of a set of dispatcher processes and agent processes, where each dispatcher process dispatches requests from active client connections to agent processes. The agent processes are responsible for performing those requests that include communication with a client application. The use of a combination of dispatcher processes and agent processes maximizes the number of client connections that can be handled by reducing the number of processes required in the system. However, the scalability of such a server system (i.e. the number of client connections that can be handled simultaneously) is directly dependent upon the number of connections a dispatcher process can manage. Such a server system suffers from poor scalability on systems with a small maximum file-table size which is typically defined by the particular version of the installed UNIX OS. If the system is required to maintain any other files associated with a particular client connection, the impact of the small file-table size may be significant.
In a database system such as DB2® available from International Business Machines Corporation, client applications may require the server system to create and maintain socket connections from the agent processes on the server to an external source when implementing a data-links feature. Since agent processes only service a particular connection for a single request, the dispatcher processes are required to maintain the sockets in addition to the client connections while the connection is not being serviced by an agent process. As a simple example, in a system in which there are 10 sockets to maintain for every client connection in the system, the resulting degredation in the amount of client connections a dispatcher process could manage simultaneously would decrease by more than a factor of 10.
It is desirable, in server systems based on the UNIX OS, to optimize file-table usage in order to minimize the impact of limitations defined by a limited size of UNIX OS file-table. A solution that addresses some or all of these short comings is therefore desired.